package com.kerbores.nutz.aop;

import org.nutz.aop.InterceptorChain;
import org.nutz.aop.MethodInterceptor;
import org.nutz.ioc.loader.annotation.IocBean;

import com.kerbores.nutz.modules.common.BaseModule;

/**
 * @author 王贵源 create at 2014年9月20日 下午5:10:12<br>
 *         清空单例模块上次请求中的数据，保证每次请求拿到的都是本次的数据
 *         
 */
@IocBean(name = "dataclear")
public class RequestDataClearInterceptor implements MethodInterceptor {

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.nutz.aop.MethodInterceptor#filter(org.nutz.aop.InterceptorChain)
	 */
	@Override
	public void filter(InterceptorChain chain) throws Throwable {
		Object module = chain.getCallingObj();
		((BaseModule) module)._clear();// 将反射调用方式转换成直接调用，避免一个模块有大量的方法的时候性能奇低
		// for (Method m : module.getClass().getDeclaredMethods()) {
		// if (Strings.equals(m.getName(), "clear")) {
		// m.invoke(module, new Object[] {});
		// }
		// }
		chain.doChain();
	}
}
